package com.kunpan.admin.mapper;

import com.kunpan.admin.entity.PanFile;
import com.kunpan.admin.entity.bo.PanFileBo;
import com.kunpan.admin.entity.dto.PanFileDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

@Mapper
public interface PanFileMapper {
    List<PanFile> selectFileListByUserId(Integer userId);

//    List<PanFile> selectFileListByFileMd5(String fileMd5);

//    List<PanFile> selectTestFileList();

    List<PanFile> selectFileList(PanFileDto panFileDto);

    int updateFile(PanFile panFil);

    List<PanFile> selectFileListByFileMd5AndFileSize(@Param("fileMd5") String fileMd5);

    PanFile selectFileByFileNameAndParentId(@Param("fileName") String fileName, @Param("parentId") Integer parentId);

    int insertFile(PanFile panFile);

    /**
     * 批量将文件删除到回收站
     */
    int updateFileStatusByIds(@Param("ids") List<Integer> ids,
                              @Param("status") int status,
                              @Param("updateTime") Date updateTime);

    /**
     * 批量还原文件
     */
    int updateChildFileStatusByIds(@Param("parentIds") Integer[] parentIds,
                                   @Param("status") int status,
                                   @Param("updateTime") Date updateTime);

    List<PanFile> selectFileListById(Integer parentId);

    /**
     * 彻底删除文件
     */
    int updateCompletelyFileById(@Param("ids") List<Integer> ids,
                                 @Param("status") int status,
                                 @Param("updateTime") Date updateTime);

    void clearRecycleFile(@Param("status") int status);

    /**
     * 根据userId进行分组求和查询出在回收站超过七天的总文件大小
     */
    List<PanFile> selectRecycleFileList();

    void updateFileUpdateTime(@Param("id") Integer id, @Param("updateTime") Date updateTime);

    Integer selectFileByFileTypeAanFileName(@Param("fileType") Integer fileType, @Param("fileName") String fileName);

    PanFile selectFileInfoById(Integer fileId);

    /**
     * 调用存储过程生成快照树
     */
    void callBuildFileTree(@Param("rootId") Integer fileId, @Param("userId") Integer userId);

    /**
     * 清理快照
     */
    void cleanupSnapshot(Integer userId);

    /**
     * 批量插入
     */
    void batchInsertFiles(@Param("list") List<PanFile> list);

    List<Integer> selectTreeByUserId(Integer fileId);

    List<PanFileBo> selectFileListByIds(@Param("ids") List<Integer> ids);
}
